A database is generally a collection of related information stored in computer readable form. Databases are ubiquitous in modern life. Mobile phones often contain databases of recently and frequently called numbers. The world wide web is comprised of countless databases. Hand held computers are in large part valuable because of the databases they contain. In fact, the databases contained in most computers are far more valuable than the computer hardware itself.
In order to use this valuable information, people must have access to the information. This is frequently accomplished using different types of computers for different situations. For example, a salesman may create a spreadsheet containing pricing information on a desktop computer, and desire to access that information via a small hand held computer while at a customer's premises.
It is often difficult, expensive or impractical to actually access the same database from both types of computers, especially if one is operated in a mobile environment. To overcome this difficulty, a process of synchronizing databases was developed.
Synchronizing a database is generally a process by which a plurality of copies of a database are maintained such that the information in all copies is the same, or synchronized. The copies need not be bit for bit identical. A synchronization process can accommodate different file structure, operating system and data media requirements. The copies are frequently on different computer systems, but it is sometimes desirable to maintain separate, synchronized databases on the same computer system. Synchronization allows updates (“mutations”) e.g., additions, deletions and/or changes made to one copy of a database, for example a copy on a hand held computer, to be reflected to all copies.
Unfortunately, synchronizing databases can be a time consuming process, especially for large databases and slow (low bandwidth), for example wireless, links between computers. Prior art synchronization systems often times require transferring all information of a database from one computer to another and performing a bit for bit comparison to determine changes. This is particularly the case when more than two synchronized copies of a database exist. As the memory capacity of computers grows, particularly hand held computers, and databases become ever larger, the time required to perform these operations is becoming a deterrent to users. Since the value of using multiple computers may depend on the ability to synchronize the data among them, impediments to synchronization serve to limit the productivity gains that may otherwise be realized.
Another prior art implementation of synchronization employs two different modes of synchronization, namely a slow “sync” mode and a fast “sync” mode. According to this implementation, a fast synchronization may only transfer information (data elements or records) which has changed since a prior synchronization between databases. However, fast synchronization may only be applicable in a limited number of situations, for example, during the first synchronization after a database has been modified. However, in a subsequent synchronization with a different (e.g., a third) database, a fast sync is not appropriate and a slow sync as described above, comparing each record in a database, is required. Although some prior art systems provide some general fast synchronization capabilities, no existing prior art systems provide for “fast” synchronization among nodes in arbitrary looped topologies.
Another shortcoming of the two-mode data synchronization approach, where fast sync is used in some cases and slow sync in others, is that it necessitates extra programming effort. In particular, since different sync modes are needed under different scenarios, developers need to incorporate program code in synchronization programs for determining which sync mode to use in a given situation, and then implement both synchronization modes. Such a requirement is undesirable because the extra program code could prolong the development cycle and introduce added complexity to the applications. Thus, it would be beneficial to provide an approach for data synchronization which is efficient in terms of speed and which does not employ multiple modes of synchronization depending on the particular situation.